# USI++ Makefile
#

LIBS=@LIBS@
LDFLAGS=@LDFLAGS@
DEFS=
CXXFLAGS=-I . -I .. @CXXFLAGS@ -Wall -c -pedantic -std=c++11 $(DEFS)
CXX=@CXX@
INSTALL=@INSTALL@
RANLIB=@RANLIB@

all: usi++

OBJS=icmp.o datalink.o ip.o ipcomp.o misc.o udp.o tcp.o TX_IP.o Layer2.o arp.o\
     eapol.o ip6.o TX_IP6.o icmp6.o TX_dnet_ip.o TX_dnet_eth.o\
     TX_pcap_eth.o TX_pcap.o TX_string.o RX_fd.o RX_string.o object.o

clear:
	rm -f $(OBJS)

usi++: $(OBJS)
	ar cr libusi++.a $(OBJS)
	$(CXX) $(OBJS) -shared $(LDFLAGS) $(LIBS) -lstdc++ -o libusi++.so
	$(RANLIB) libusi++.a

object.o: object.cc
	$(CXX) $(CXXFLAGS) $<

TX_pcap.o: TX_pcap.cc
	$(CXX) $(CXXFLAGS) $<

TX_pcap_eth.o: TX_pcap_eth.cc
	$(CXX) $(CXXFLAGS) $<

TX_dnet_eth.o: TX_dnet_eth.cc
	$(CXX) $(CXXFLAGS) $<

TX_dnet_ip.o: TX_dnet_ip.cc
	$(CXX) $(CXXFLAGS) $<

TX_string.o: TX_string.cc
	$(CXX) $(CXXFLAGS) $<

RX_fd.o: RX_fd.cc
	$(CXX) $(CXXFLAGS) $<

RX_string.o: RX_string.cc
	$(CXX) $(CXXFLAGS) $<

icmp6.o: icmp6.cc
	$(CXX) $(CXXFLAGS) $<

TX_IP6.o: TX_IP6.cc
	$(CXX) $(CXXFLAGS) $<

ip6.o: ip6.cc
	$(CXX) $(CXXFLAGS) $<

arp.o: arp.cc
	$(CXX) $(CXXFLAGS) $<

eapol.o: eapol.cc
	$(CXX) $(CXXFLAGS) $<

datalink.o: datalink.cc
	$(CXX) $(CXXFLAGS) $<

icmp.o: icmp.cc
	$(CXX) $(CXXFLAGS) $<

ip.o: ip.cc
	$(CXX) $(CXXFLAGS) $<

misc.o: misc.cc
	$(CXX) $(CXXFLAGS) $<

udp.o: udp.cc
	$(CXX) $(CXXFLAGS) $<

tcp.o: tcp.cc
	$(CXX) $(CXXFLAGS) $<

Layer2.o: Layer2.cc
	$(CXX) $(CXXFLAGS) $<

TX_IP.o: TX_IP.cc
	$(CXX) $(CXXFLAGS) $<

ipcomp.o: ipcomp.cc
	$(CXX) $(CXXFLAGS) $<


install:
	$(INSTALL) -g bin -o root -m 0755 libusi++.* @prefix@/lib
	mkdir -p -m 0755 @prefix@/include/usi++||true
	cp ../usi++/* @prefix@/include/usi++
	chown -R root:bin @prefix@/include/usi++
	chmod 0644 @prefix@/include/usi++/*
	ldconfig||true
	@echo To build programs using libusi++, you have to use \'c++ -std=c++11 foo.cc -L@prefix@/lib -lusi++ $(LIBS)\'

uninstall:
	rm -f @prefix@/lib/libusi++.a
	rm -f @prefix@/lib/libusi++.so
	rm -rf @prefix@/include/usi++

clean:
	rm -f *.o *.a *.so

